#!/bin/bash
#
# 脚本名称：git-switch-all
# 功能说明：批量切换当前目录下所有子 Git 仓库到指定分支
# 使用方式：git-switch-all <目标分支名>
# 示例：git-switch-all feature-branch

# 检查参数数量
if [ "$#" -ne 1 ]; then
  echo "使用方式：$0 <目标分支名>"
  exit 1
fi

TARGET_BRANCH="$1"
CURRENT_DIR=$(pwd)

# 遍历当前目录下的所有子目录
for DIR in */; do
  # 跳过当前目录和父目录
  if [[ "$DIR" == "./" || "$DIR" == "../" ]]; then
    continue
  fi

  # 检查是否为 Git 仓库
  if [ -d "$DIR/.git" ]; then
    echo "处理仓库：$DIR"

    cd "$DIR" || { echo "进入目录失败：$DIR"; continue; }

    # 获取最新分支信息
    git fetch -p &> /dev/null

    # 尝试切换分支
    if git rev-parse --verify "$TARGET_BRANCH" &> /dev/null; then
      git checkout "$TARGET_BRANCH" &> /dev/null
      echo "  ✅ 已切换到本地分支 $TARGET_BRANCH"
    else
      # 尝试从远程创建分支
      git checkout -b "$TARGET_BRANCH" --track origin/"$TARGET_BRANCH" &> /dev/null && \
        echo "  ✅ 已从远程创建分支 $TARGET_BRANCH" || \
        echo "  ❌ 分支不存在：$TARGET_BRANCH"
    fi

    cd "$CURRENT_DIR" || { echo "返回目录失败：$CURRENT_DIR"; exit 1; }
  fi
done

echo "所有仓库处理完成"